ローカルで GitHub を構築! Git リポジトリ管理ツール「GitLab」を Mac OS X にインストールしてみた
GitLab とは
GitLab は Git リポジトリを簡単に管理できるツール Gitolite をブラウザから管理できるようにする Ruby アプリケーションです。 GitHub のオープンソースクローンと呼ばれることから分かるように、UI が GitHub とめっちゃ似ています。
GitHub みたいなサービスを使いたい!だけど Public はアレだなということもあると思います。そんなときに便利です。 社内 GitHub として使うケースが主なユースケースだと思います。 しかもすべてローカルだけで作ることができるので、ローカルマシンにインストールすれば、構築後はネットワークなしで GitHub 的な環境を使うことができます! そんな GitLab を Mac OSX Mountain Lion に導入してみたので、その手順をまとめました。
事前準備
git ユーザーを作成する
まずはじめに GitLab の管理者となる "git" という名前のユーザーを作成します。 ログイン中のユーザーでいいやん!と思っていろいろと試行錯誤しましたが GitLab のつくりが git ユーザーであることを前提としてつくられているので大人しく git ユーザーを作ったほうが良さそうです。
git ユーザーとしてログインし、SSH公開鍵をパスワードなしで作成しておきます。
su - git ssh-keygen -t rsa -N ''
ここまでで git ユーザー作成は完了です。
リモートログインを有効にする
Gitolite リポジトリのアクセスは SSH 接続になるので、Mac のリモートログインを有効にする必要があります。環境設定の共有を使うと簡単に有効にできます。
各種ツールをインストールする
必要なツールなどをインストールします。GitLab が Ruby でできているので Ruby を動作させる環境づくりが必要です。必要なツール・ソフトは結構ありますが、開発に必要なツールもいくつかあるので導入済みのものが多いと思います(特に Ruby 開発者)。既に導入済みのツールのところは飛ばしてしまって OK です。
Xcode Command Line Tools のインストール
Homebrew と git を使うために Xcode Command Line Tools をインストールします。Xcode の環境設定からインストールするか Downloads for Apple Developers からインストーラをダウンロードしてインストールしましょう(この場合は開発者登録が必要)。
Homebrew のインストール
Homebrew は OSX 用の UNIX ツールのインストールを管理するツールです。Xcode Command Line Tools がインストールされている環境であれば以下のコマンドを叩くだけで導入可能です。
ruby <(curl -fsSk https://raw.github.com/mxcl/homebrew/go) [/shell] <h4>icu4c のインストール</h4> <p> icu4c は文字コード変換ライブラリです。GitLab の動作に必要な<strong> charlock_holmes </strong>というライブラリに必要なライブラリになります。とにかく、以下のコマンドを叩いてインストールです。 </p> brew install icu4c
MySQL のインストール
MySQL も何らかの形でインストールしておきます。phpMyAdmin も一緒に入ってくれて楽チンなので MAMP を使いました。このへんは好き嫌いがあると思うのでご自由に。また以下のコマンドを叩き mysql のクライアントライブラリをインストールしておきます。
brew install mysql
Redis のインストール
Redis は インメモリベースの KVS (Key-Value Store) で、データの出し入れが高速なデータストアです。インストール方法は非常に簡単。以下のコマンドを叩くだけです。
brew install redis
インストール後は以下のコマンドを叩き、自動起動するように設定してセットアップ完了です。
mkdir -p ~/Library/LaunchAgents cp /usr/local/Cellar/redis/2.6.9/homebrew.mxcl.redis.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
2行目の Redis ディレクトリ内のバージョン名は Redis のバージョンアップによって変わってくるので、コピペせず自分でたどっていってください。
Ruby のインストール
最後は Ruby のインストールです。 Ruby のインストールは git ユーザーで行う必要があるので、まず git ユーザーとしてログインします。
su - git
Ruby は複数バージョンの Ruby を共存させる方法がオススメです。以下の記事を参照してください!
rbenvとruby-buildで複数バージョンのrubyをインストール
Gitolite をインストールする
事前準備完了後、まずは Gitolite をインストールしましょう。なお、これ以降の作業は git ユーザーで行なってください。
su - git
1. Gitolite をインストールする
まずは Gitolite を GitHub のリポジトリからローカルに clone します。そして Gitolite を $HOME/bin にインストールして setup を実行すれば Gitolite が使えるようになります。以下のコマンドを順番に叩けば OK です。Gitolite は GitLab のリポジトリから clone しているところが重要です。
cd /tmp git clone git clone -b gl-v320 https://github.com/gitlabhq/gitolite.git /Users/git/gitolite mkdir -p $HOME/bin gitolite/install -to $HOME/bin rm -rf gitolite cd ~/ $HOME/bin/gitolite setup -pk ~./ssh/id_rsa.pub
setup が終わったら、各ディレクトリのパーミッションを GitLab から読めるように変更します。
sudo chmod 750 .gitolite sudo chown -R git .gitolite sudo chmod -R ug+rwXs,o-rwx repositories sudo chown -R git:git repositories
2. gitolite-admin を編集する
Gitolite をインストール・セットアップすると gitolite-admin というリポジトリがデフォルトで作成されています。これは Gitolite のリポジトリにアクセスできるユーザーを管理するリポジトリです。このリポジトリを clone して設定ファイルを書き換えて push すると Gitolite の設定が変更されるしくみになっています。
ということで疎通確認ということで clone してみます。
git clone localhost:gitolite-admin cd gitolite-admin
無事に clone できたら、git ユーザーが gitolite の管理権限を持てたことになります。
GitLab をインストールする
1. MySQL にデータベースを作成する
まず GitLab に必要なデータベースを作っておきましょう。 gitlabhq_production という名前のデータベースを作成します。 MySQL を MAMP でインストールしている場合は phoMyAdmin から作成できます。
2. Github から clone する
GitLab のソースを Github から clone します。 GitLab を置きたいディレクトリで以下を実行します。
git clone https://github.com/gitlabhq/gitlabhq.git gitlab cd gitlab
3. ライブラリをインストールする
次に動作に必要なライブラリをインストールします。
必要なライブラリは GemFile に書かれているので bundle install すれば OK です。
bundle install --deployment --without development test postgres
ちょっと時間がかかりますが、まったり待ちましょう。
4. 設定ファイルを修正する
次に各種設定ファイルを修正します。まずは設定ファイルのサンプルを設定ファイルにします。
cp config/database.yml.mysql config/database.yml cp config/gitlab.yml.example config/gitlab.yml
サンプルファイルが本番用になったところで、各ファイルを修正していきます。まずは database.yml です。MAMP を使っている場合、socket は上記の通りになります。username と password はもし設定していれば変えてください。
database.yml
# # PRODUCTION # production: adapter: mysql2 encoding: utf8 reconnect: false database: gitlabhq_production pool: 5 username: root password: root host: localhost socket: /Applications/MAMP/tmp/mysql.sock
次に gitlab.yml です。以下のように書き換えていきます。特に環境によって変わってくるのは repos_path と hooks_path です。自分の環境 (Gitolite をインストールした設定) にあわせて指定してください。
gitlab.yml
# Uncomment and customize if you can't use the default user to run GitLab (default: 'gitlab') user: git
...
# # 3. Advanced settings # ========================== # GitLab Satellites satellites: # Relative paths are relative to Rails.root (default: tmp/repo_satellites/) path: tmp/gitlab-satellites/ ## Backup settings backup: path: tmp/backups/ # Relative paths are relative to Rails.root (default: tmp/backups/) # keep_time: 604800 # default: 0 (forever) (in seconds) ## Gitolite settings gitolite: admin_uri: localhost:gitolite-admin # REPOS_PATH MUST NOT BE A SYMLINK!!! repos_path: /Users/git/repositories/ hooks_path: /Users/git/.gitolite/hooks/ admin_key: git upload_pack: true receive_pack: true ssh_user: git ssh_host: localhost # ssh_port: 22 # config_file: gitolite.conf
5. GitLab をインストールする
最後に以下のコマンドを叩いてインストール!
bundle exec rake gitlab:setup RAILS_ENV=production
がががぁ〜っと DB のテーブルやらレコードやらが作成されていきます。最後に管理者のユーザー名とパスワードが表示されれば完了です!
Administrator account created: [email protected] password......5iveL!fe
ということでまずは動かしてみましょう。以下のコマンドを叩くとサーバーが立ち上がります。production環境で動作させましょう。
bundle exec rails s -e production
動作に成功すると URL が書いてあるのでコピペします。
=> Booting WEBrick => Rails 3.2.11 application starting in production on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2013-02-02 02:32:20] INFO WEBrick 1.3.1 [2013-02-02 02:32:20] INFO ruby 1.9.3 (2012-10-12) [x86_64-darwin12.1.0] [2013-02-02 02:32:20] INFO WEBrick::HTTPServer#start: pid=36941 port=3000
ブラウザでアクセスしてみると…どどーん!
使ってみる
起動できたので実際に使ってみたいと思います。まずは管理ユーザーでログイン。
Dashboard 画面が表示されるので「New Project」でプロジェクトを新規作成してみます。
おやおや。
おやおや。
何かエラーが出ちゃいました。。何かが悪かったようです。エラーログを見てみるとこんな感じでした。↓
February 06, 2013 00:36 -> ERROR -> Gitolite error -> remote: FATAL: git config 'core.sharedRepository' not allowed[K remote: check GIT_CONFIG_KEYS in the rc file[K To git@localhost:gitolite-admin 81541f3..8fb0dc8 master -> master
git ユーザーに権限が正しくわたっていない感じのようです。解決法を探しまくってたら以下の記事を発見。
https://github.com/gitlabhq/gitlabhq/issues/1769
.gitolite.rc ファイルの GIT_CONFIG_KEYS を変えればいけるぜ :) って書いてあるのでそうしてみます :) 。24行目あたりです。
%RC = ( # if you're using mirroring, you need a hostname. This is *one* simple # word, not a full domain name. See documentation if in doubt # HOSTNAME => 'darkstar', UMASK => 0077, # look in the "GIT-CONFIG" section in the README for what to do GIT_CONFIG_KEYS => '.*', # comment out if you don't need all the extra detail in the logfile LOG_EXTRA => 1,
再度リポジトリを作成したところ…成功!
あとはログイン中の SSH キーを設定します。
そんな感じで git リポジトリを使うことができるようになりました!あとは作成したリポジトリに対して普通に git コマンドを叩くだけです。例えば、以下のような感じです。
git clone git@localhost:root/sample_app.git git cd sampleapp git touch index.html git add . git commit -m 'first commit.' git remote add git@localhost:root/sample_app.git git push origin master
push した結果を見てみたいと思います。
良い感じに表示されますね!いろいろ使ってみると GitHub より機能は少ないと感じると思いますが、普通に運用するレベルだったら申し分ない機能があると思います。
Pow
上記で立てた GitLab サーバーは WEBrick で一時的に起動しているのでコマンドを叩かないと起動しません。 もっと簡単にサーバーを起動するには Pow が便利です。
Pow を使うとブラウザで http://プロジェクト名.dev と入力するだけでサーバーが立ち上がりアクセスできます。ということで早速インストールします。
curl get.pow.cx | sh
これでインストール終わりです!w
あとはアプリを登録します。
cd ~/.pow ln -s ~/gitlab
これで http://gitlab.dev でアクセスできるようになりました!と思いきや一部設定が必要です。Pow は development 環境で起動しようとするので今回の場合 production 環境で起動するようにしなければいけません。ということで Gitlab のサーバー起動設定を production に変えます。Gitlab プロジェクトフォルダの直下に .powenv というファイルを置き、中身を以下にします。
export RAILS_ENV=production
これで起動できるはずです!
まとめ
GitLab は通常サーバーにインストールして社内とかで使おうぜ、というものだと思うのでローカルに入れるのは普通しないことだとは思いますが、まずどんなことができるのか知りたかったので入れてみました。実際に導入する段階でいろいろハマったところはありましたが…個人的には最近流行りの Ruby 開発環境の構築手順を知る意味でもすごく勉強になりました。
Mac OS X Server へのインストールもほぼ同様の手順でできると思うので、もし導入する際に参考にしていただければと思います!